package com.hlf.modules.merchant.order.service;

import com.hlf.common.utils.PageUtils;
import com.hlf.common.utils.ReturnResult;
import com.hlf.modules.merchant.order.entity.Order;
import com.hlf.modules.merchant.order.entity.OrderDetail;
import com.hlf.modules.sys.entity.SysUserEntity;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * 订单接口
 * Created by Administrator on 2017/9/22.
 */
public interface OrderService {

    PageUtils queryListForPage(Map<String, Object> map);

    PageUtils queryListForStoreId(Map<String, Object> params,Long storeId);

    PageUtils queryListForMerchantId(Map<String, Object> params,Long merchantId);

    int insertSelective(Order order);

    /**
     * 查询未完成总订单
     *
     * @param
     * @return
     */
    Order queryForIdUnpaid(Long id);

    /**
     * 根据订单编号 查询未完成的 ,所有订单订单集合
     *
     * @param
     * @return
     */
    List<Order> queryListForOrderNumUnpaid(Long orderNum);

    /**
     * 查询未完成订单
     * @param tableId
     * @return
     */
    Order queryForTableIdUnpaid(Long tableId);

    /**
     * 查找桌位订单数
     * @param tableId
     * @return
     */
    Integer queryCountByTableId(Long tableId);

    /**
     * 获取未完成整个订单(总订单)
     * @param orderDetailList
     * @param tableId
     * @return
     */
    Order getOrderResultUnpaid(List<OrderDetail> orderDetailList, Long tableId);

    /**
     * 获取未完成订单(加菜订单)
     * @return
     */
    Order getOrderAddUnpaid(Long tableId,Long addOrderId);

    /**
     * 将加菜订单汇入总订单,返回深度查询结果
     * @param orderDetailList
     * @param orderResult
     * @return
     */
    Map<String,Object> getOrderAndSaveBranchUnpaid(Long orderIdBranch ,List<OrderDetail> orderDetailList, Order orderResult);

    /**
     * 创建订单
     * @param request
     * @param tableId
     * @return
     */
    ReturnResult createOrder(HttpServletRequest request,String tableId);

    /**
     * 创建订单
     * @param request
     * @param tableId
     * @return
     */
    ReturnResult addOrder(HttpServletRequest request,String tableId);

    /**
     * 添加备注
     * @param request
     * @param orderId
     * @param remarks
     */
    void insertReamrks(HttpServletRequest request, String orderId, String remarks);

    /**
     * 取消订单
     * @param request
     * @param orderId
     */
    Long cancelOrder(HttpServletRequest request, String orderId);

    /**
     * 订单列表
     * @param tableId
     * @return
     */
    ReturnResult orderList(String tableId);

    /**
     * 转台
     * @param request
     * @param newTableId
     * @param orderId
     */
    void changTable(HttpServletRequest request, String newTableId, String orderId);

    /**
     * 打折优惠
     * @param id
     * @param orderId
     */
    void rebate(HttpServletRequest request,String id, String orderId);

    /**
     * 退菜
     * @param request
     * @param orderId
     * @param goodsId
     */
    void returnGoods(HttpServletRequest request, String orderId, String goodsId);

    /**
     * 打印小票
     * @param tableId
     */
    void print(String tableId);

    /**
     * 现金收款
     * @param request
     * @param orderId
     */
    void cashPay(HttpServletRequest request, String orderId);

    /**
     * 一码支付
     * @param request
     * @param orderId
     */
    void ymPay(HttpServletRequest request, String orderId);

    /**
     * 订单列表(根据订单状态分类)
     * @param storeId
     * @return
     */
    Map<Byte, List<Order>> queryOrderByStoreId(String storeId);

    /**
     * 搜索订单
     * @param tableNum
     * @param storeId
     * @return
     */
    List<Order> orderSerach(String tableNum, String storeId);

    /**
     * 免茶位费
     * @param tableId
     * @param currentStoreId
     * @param user
     */
    void gratisTea(String tableId, String currentStoreId, SysUserEntity user);

    /**
     * 今日详情
     * @param user
     * @return
     */
    ReturnResult today(SysUserEntity user);

    /**
     * 分页订单中心
     * @param map1
     * @return
     */
    List<Order> queryAllOrderPageByStoreId(Map<String, Object> map1);

    /**
     * 分页订单中心-根据支付状态
     * @param map1
     * @return
     */
    List<Order> queryOrderPageByStoreId(Map<String, Object> map1);
}
